基础
内核为用户空间提供的一些服务
- 文件系统的IO
- 权限管理
- 系统调用(Syscalls)
- 进程管理
- ……
内核通熟来说就是底层的代码(它是操作系统的核心),有两个主要的职能:
- 跟硬件交互,控制硬件
- 为应用程序提供一个运行环境
内核空间Ring0,我们用户空间就是Ring3
使用的常用的库函数也有所区别
内核管理进程,所以权限也是他管了
利用相关
我们可以用commit_credit,更新进程的credentials
我们可以prepare_kernel_cred_t构造一个cred数据结构
那就是两步
由于在内核中我们很难修改文件系统,创建新的进程,创建网络连接,所以我们要回到用户空间
我们可以通过下面的方式劫持控制流
我们熟悉的防护有下面的
一些新的防护
mmap_min_addr
它可以使空指针引用的漏洞利用更加困难
一般空指针引用流程如下,而mmap_min_addr不允许程序申请低地址的内存,所以极大增加了利用难度
kallsyms
/proc/kallsyms
提供内核的符号
假如我们没有信息泄露漏洞,那么我们就需要它
那么假如有这个防护,那么没有权限的用户就会返回0了
SMEP / SMAP
SMEP: Supervisor Mode Execution Protection
Introduced in Intel IvyBridge
SMAP: Supervisor Mode Access Protection
Introduced in Intel Haswell
一般提权的代码是这样的
SMEP避免这种攻击是通过触发一个页错误(page fault)来完成大的, 就是如果一个设置了user bit的程序在ring0中执行内存中的代码,那就触发一个page fault
SMAP也是类似的,不过这个是防御对数据的读取